package com.example.airole.llm.entity;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 聊天响应实体
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ChatResponse {
    
    /**
     * 回复内容
     */
    private String content;
    
    /**
     * 消息ID
     */
    private String messageId;
    
    /**
     * 使用的模型
     */
    private String model;
    
    /**
     * 使用的令牌数
     */
    private Integer usageTokens;
    
    /**
     * 提示令牌数
     */
    private Integer promptTokens;
    
    /**
     * 完成令牌数
     */
    private Integer completionTokens;
    
    /**
     * 完成原因
     */
    private String finishReason;
    
    /**
     * 处理时长(毫秒)
     */
    private Long processingTime;
    
    /**
     * 是否成功
     */
    private boolean success;
    
    /**
     * 错误信息
     */
    private String errorMessage;
    
    /**
     * 错误代码
     */
    private String errorCode;
    
    /**
     * 请求ID
     */
    private String requestId;
    
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    
    /**
     * 元数据
     */
    private Map<String, Object> metadata;
    
    /**
     * 工具调用
     */
    private List<ChatMessage.ToolCall> toolCalls;
    
    /**
     * 流式响应数据
     */
    private List<StreamChunk> streamChunks;
    
    /**
     * 流式响应块
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class StreamChunk {
        private String content;
        private String delta;
        private boolean finished;
        private Map<String, Object> metadata;
    }
}

